package com.it.product.comtroller;

import com.it.product.domain.Category;
import com.it.product.service.ICategoryService;
import com.spzx.common.core.domain.R;
import com.spzx.common.core.web.controller.BaseController;
import com.spzx.common.core.web.domain.AjaxResult;
import com.spzx.common.security.annotation.InnerAuth;
import com.spzx.product.api.domain.vo.CategoryVo;

import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;

import jakarta.servlet.http.HttpServletResponse;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;


import java.util.List;

/**
 * projectName: spzx-parent
 *
 * @author: 王宝贵
 * time: 2024/9/20 19:08 周五
 * description:
 */
@Tag(name = "商品分类")
@RestController
@RequestMapping("/category")
public class CategoryController  extends BaseController {

    @Autowired
    ICategoryService categoryService;


    /**
     * 查询商品分类
     * @param id 父类的id
     * @return
     * 首先是一级标签id 返回的多个2级的数据 后面会根句单个2级标签的id查询多个三级标签信息
     * id 0 都是一级标签 1是第一个一级标签的二级标签 119是第二个一级标签的二级标签
     */
    @Operation(summary = "商品分类")
    @GetMapping("/treeSelect/{id}")
    public AjaxResult treeSelect(@PathVariable("id") Long id){
        List<Category> category= categoryService.treeSelect(id);
        return success(category);
    }

    /**
     * 数据的导出
     * @param
     */
    @Operation(summary = "数据导出")
    @PostMapping("/export")
    public void export (HttpServletResponse response) throws Exception {
        categoryService.export(response);
    }

    /**
     * 数据导入
     */
    @Operation(summary = "数据导入")
    @PostMapping("/import")
    public AjaxResult importData(MultipartFile file) throws Exception{
        try {
            categoryService.importData(file);
            return AjaxResult.success("导入成功");
        } catch (Exception e) {
            e.printStackTrace();
        }
        return AjaxResult.success("导入失败");

    }


    //------------------------------------------以下接口是远程调用使用-------------------------------------------

    /**
     * 远程调用category 查询所有的远程 一级分类
     * @return 返回的是集合
     */
    //@InnerAuth(isUser = true)
    @InnerAuth //用户名 用户id不需要指定 如果需要指定 需要加上isUser=ture  内部接口权限
    @GetMapping("/getOneCategory")
    public R<List<CategoryVo>> getOneCategory(){
        List<CategoryVo> oneCategory = categoryService.getOneCategory();
        System.out.println(oneCategory);
        return R.ok(oneCategory);
    }

    /**
     * 远程调用查询分类 （用户端）
     * @return 返回的是list集合
     */
    @InnerAuth
    @GetMapping(value = "/tree")
    public R<List<CategoryVo> > tree() {
        List<CategoryVo> tree = categoryService.tree();
        return R.ok(tree);
    }



}